package 二分;
/**
 * 熟悉一下二分 
 * 
 * 
 * 
 * @author I adore you
 *
 */
public class leetcode744寻找比字母大的最小字母 {
//		public static int recursion(char letters[],int l,int r) {
//			if() {
//				
//			}
//		}
	public static void main(String []args) {
		char letters [] = {'c','f','g'};
		char aim = 'z';
		System.out.println(solution(letters,aim));
//		System.out.println(plainBinarySearch(letters,aim));
		System.out.println(solutionOne(letters,aim));
	}
	
	public static char solution(char letters[],char target) {
		int  r = letters.length;
		int l = 0;
		while(l < r) {
			if(target < letters[l]) {
				return letters[l];
			}
			l++;
		}
		return letters[0];
	}
	public static char solutionOne(char [] letters,char target) {
		int l = 0;
		int r = letters.length - 1;
		int index = -1;
		int mid = 0;
		while(l <= r) {
			mid = l + r >> 1;
			if(letters[mid] > target) {
				index = mid;
				r = mid  - 1 ;
			}
			else {
				l  = mid +1;
			}
		}
		return index == -1 ? letters[0] :letters[index] ;
	}
	
	
	/**
	 * 这他妈 不太对 有问题 的 下面的 这代码 
	 * 直接 扔掉  吧 不用 下面的 代码
	 */
	public static char plainBinarySearch(char nums[],int aim) {
		int l = 0;
		int r = nums.length - 1;
		int mid = 0;
		while(l <=r) {
			mid = (l+r)>>1;
			if( aim < nums[mid]) {
				r = mid - 1;
			}
			else if( aim > nums[mid]) {
				l = mid + 1;
			}
			else if(aim == nums[mid]) {
				for(int i = mid + 1; i < nums.length ;i++) {
					if(aim < nums[i]) {
						return nums[i];
					}
				}
			}
		
		}
		return nums[0];
	}
	
}
